// 这个文件进行打包packages下的模块，最终打包出js文件
// 在es module 中没有require，__dirname等node内容
import minimist from "minimist";
import { resolve, dirname } from "path"
import { fileURLToPath } from "url"
import { createRequire } from "module"
import esbuild from "esbuild"

// node 中命令函数参数通过process 获取
const args = minimist(process.argv.slice(2))
const require = createRequire(import.meta.url)
const __filename = fileURLToPath(import.meta.url) // 文件路径
const __dirname = dirname(__filename)

const target = args._[0] || "reactivity"; // 打包哪个项目
const format = args.f || "iife" // 打包后的模块话规范
const formatMap = {
    iife: "global",
    esm: "esm-builder",
    cjs: "cjs"
}

// 入口文件， 根据命令行提供的路径来解析
const entry = resolve(__dirname, `../packages/${target}/src/index.ts`)
const pkg = require(`../packages/${target}/package.json`)

esbuild.context({
    entryPoints: [entry],  //入口文件
    outfile: resolve(__dirname, `../packages/${target}/dist/${target}.${formatMap[format]}.js`), // 输入文件
    bundle: true,  // 是否都打包到一起
    platform: "browser",  // 给浏览器使用
    sourcemap: true,  // 开启sourcemap
    format,  // 打包的格式
    globalName: pkg.buildOptions?.name // 打包名字（iife 打包必填）
}).then((ctx) => {
    console.log("start dev")

    return ctx.watch() // 监控入口文件持续进行打包处理
})

console.log(target, format, __filename, entry)

